package com.ruoyi.merchant.mapper;

import com.ruoyi.merchant.domain.MerchantBankCard;
import com.ruoyi.merchant.domain.vo.BankCardVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商家银行卡Mapper接口
 */
public interface MerchantBankCardMapper {
    
    /**
     * 查询银行卡列表
     *
     * @param merchantId 商家ID
     * @return 银行卡列表
     */
    List<BankCardVO> selectBankCardList(@Param("merchantId") Long merchantId);
    
    /**
     * 根据ID查询银行卡详情
     *
     * @param cardId 银行卡ID
     * @param merchantId 商家ID
     * @return 银行卡详情
     */
    MerchantBankCard selectBankCardById(@Param("cardId") Long cardId, 
                                        @Param("merchantId") Long merchantId);

    /**
     * 检查银行卡是否存在（全局检查）
     *
     * @param cardNumber 银行卡号
     * @return 数量
     */
    int checkBankCardExists(@Param("cardNumber") String cardNumber);

    /**
     * 插入银行卡
     *
     * @param bankCard 银行卡信息
     * @return 影响行数
     */
    int insertBankCard(MerchantBankCard bankCard);
    
    /**
     * 取消默认银行卡
     *
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int cancelDefaultBankCard(@Param("merchantId") Long merchantId);
    
    /**
     * 设置默认银行卡
     *
     * @param cardId 银行卡ID
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int setDefaultBankCard(@Param("cardId") Long cardId, 
                          @Param("merchantId") Long merchantId);

    /**
     * 统计商家名下有效银行卡数量
     */
    int countBankCards(@Param("merchantId") Long merchantId);
    
    /**
     * 删除银行卡（软删除）
     *
     * @param cardId 银行卡ID
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int deleteBankCard(@Param("cardId") Long cardId, 
                      @Param("merchantId") Long merchantId);
    
    /**
     * 更新银行卡验证状态
     *
     * @param cardId 银行卡ID
     * @param merchantId 商家ID
     * @return 影响行数
     */
    int updateBankCardVerified(@Param("cardId") Long cardId, 
                               @Param("merchantId") Long merchantId);
    
    /**
     * 更新银行卡最后使用时间
     *
     * @param cardId 银行卡ID
     * @return 影响行数
     */
    int updateLastUsedAt(@Param("cardId") Long cardId);
    
    /**
     * 查询默认银行卡
     *
     * @param merchantId 商家ID
     * @return 默认银行卡
     */
    MerchantBankCard selectDefaultBankCard(@Param("merchantId") Long merchantId);
}
